void main() {
  /**
   * Dart 数据类型- Map
   * 1. Map是一个无序的键值对(key-value )映射。通常被称为哈希或字典
   * 2. 声明方式
   *   1. var map = {'key1': 'value1', 'key2': 'value2'};
   *   2. var map = new Map();
   */
  // 字面量声明
  var map1 = {'key1': 'value1', 'key2': 'value2', 'sex': 20};
  print('字面量声明: $map1');
  // 构造函数声明
  var map2 = new Map();
  map2['key1'] = 'value1';
  map2['key2'] = 'value2';
  print('构造函数声明: $map2');

  // 取值
  print('map1[key1]: ${map1['key1']}');
  print('map2[key1]: ${map2['key1']}');

  // 遍历所有的值
  map1.forEach((key, value) {
    print('key: $key, value: $value');
  });

  // 获取所有的key
  var keys1 = map1.keys;
  print('keys1: $keys1');
  print('keys1 to list: ${keys1.toList()}');
  // 获取所有的value
  var values1 = map1.values;
  print('values1: $values1');
  print('values1 to list: ${values1.toList()}');

  // 判断是否包含某个key
  print('map1 contains key1: ${map1.containsKey('key1')}');
  print('map1 contains key3: ${map1.containsKey('key3')}');

  // 判断是否包含某个value
  print('map1 contains value1: ${map1.containsValue('value1')}');
  print('map1 contains value3: ${map1.containsValue('value3')}');

  // 判断是否为空
  print('map1 is empty: ${map1.isEmpty}');
  print('map2 is empty: ${map2.isEmpty}');

  // 判断是否不为空
  print('map1 is not empty: ${map1.isNotEmpty}');
  print('map2 is not empty: ${map2.isNotEmpty}');

  // 清空
  // map1.clear();

  // 判断使用添加了这个key，如果有则不更新值，如果没有则更新值
  map1.putIfAbsent('age', () => 40);
  print(map1);

  // 根据条件进行删除
  map1.removeWhere((key, value) => key == 'key1');
  print(map1);
}
